'''
这个小工具是我心血来潮搞出来的，如果能帮到您我真的很高兴，希望能够帮到更多人！
软件作者：夜鹏程
主页：yepc.cn
希望大家在次编译时请将软件右下角的作者信息保留！
'''
import base64
import ctypes
import os
import re
import shutil
import webbrowser
import requests
import sys
import tkinter as tk
from icon import img
from tkinter import messagebox


#版本号
VERSION = 1.6


def extract_version(url):
    # 发送 HTTP 请求获取网页内容
    response = requests.get(url)
    if response.status_code == 200:
        # 使用正则表达式查找 VERSION = 后面的数值
        match = re.search(r'VERSION\s*=\s*(\d+\.\d+)', response.text)
        if match:
            return match.group(1)

#版本号获取地址
url = "https://yepc.cn/blog/15.html"
#网络版本号
XVERSION = extract_version(url)
print("提取的版本信息：", XVERSION)
#版本号字符串转浮数
v = float(VERSION)
xv = float(XVERSION)
print(f"{v}")
print(f"{xv}")
#对比版本号
if v < xv:
    response = messagebox.askyesno("更新提示", f"检测到新版本 {xv}，是否更新？")
    if response:
        webbrowser.open("https://yepc.cn/blog/15.html")
        sys.exit()


#逻辑
#激活
def jihuo_button():
    print("开始激活")
    # 定义 hosts 文件的路径
    hosts_file_path = r"C:\Windows\System32\drivers\etc\hosts"
    try:
        # 删除旧的 hosts 文件
        os.remove(hosts_file_path)
        print("旧的 hosts 文件已被删除。")
        # 从指定 URL 下载新的 hosts 文件
        response = requests.get("https://gitee.com/yepccn/cdr_tool/releases/download/1.5/hosts")
        if response.status_code == 200:
            # 写入新的 hosts 文件
            with open(hosts_file_path, 'wb') as f:
                f.write(response.content)
            print("新的 hosts 文件已下载并写入。")
            messagebox.showinfo("信息", "修复完成")
        else:
            print("下载失败，状态码：", response.status_code)
            messagebox.showerror("错误", "下载失败，请联系作者:yepc.cn")
            webbrowser.open('http://yepc.cn')
    except Exception as e:
        messagebox.showerror("错误", f"错误{e}\n截图联系作者:yepc.cn")
        webbrowser.open('http://yepc.cn')
        print("发生错误：", e)


#菜单
def memu_button():
    print("memu")
    #获取当前系统的桌面目录地址
    desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop')
    #桌面创建menu文件夹
    menu_folder_path = os.path.join(desktop_path, 'menu')
    # 确保 menu 文件夹存在
    if not os.path.exists(menu_folder_path):
        os.makedirs(menu_folder_path)
    # 文件的 URL
    file_url = 'https://gitee.com/yepccn/cdr_tool/releases/download/1.5/menu'
    # 文件名
    file_name = 'menu.xslt'
    # 完整的文件路径
    file_path = os.path.join(menu_folder_path, file_name)
    # 发送 GET 请求下载文件
    try:
        response = requests.get(file_url)
        response.raise_for_status()  # 如果请求返回了一个错误状态码，会抛出异常
        # 写入文件
        with open(file_path, 'wb') as f:
            f.write(response.content)
        print(f"文件已下载并保存到：{file_path}")
        messagebox.showinfo("信息", f"菜单文件已经保存到{file_path}，将跳转到手动修复教程页")
        webbrowser.open("https://yepc.cn/blog/15.html")
    except requests.RequestException as e:
        print(f"请求或下载文件时出错：{e}")
        messagebox.showerror("错误", "下载失败，如果您已经联网还出现了此错误，请截图联系作者:yepc.cn")
        webbrowser.open('http://yepc.cn')

#储存
def chucun_button():
    print("储存")
    try:
        #获取当前User目录添加变量
        appdata = os.getenv('AppData')
        if not appdata:
            raise Exception("无法获取AppData目录")

        # 获取User Custom Data目录添加变量
        user_dir = os.path.join(appdata, 'Corel', 'CorelDRAW Graphics Suite X4' , "User Custom Data")
        print(f"目标目录: {user_dir}")

        if os.path.exists(user_dir):
            # 删除文件夹，增加异常处理
            try:
                shutil.rmtree(user_dir)
                print("修复完成")
                messagebox.showinfo("信息", "修复完成")
            except PermissionError:
                print("权限错误：无法删除文件夹，可能文件被占用")
                messagebox.showerror("错误", "权限错误：可能文件被占用\n请关闭CorelDRAW后重试或手动删除该目录")
        else:
            print("目标目录不存在")
            messagebox.showerror("错误", "目标目录不存在\n请确认CorelDRAW X4已安装且路径正确")
    except Exception as e:
        print(f"处理过程中出错：{e}")
        messagebox.showerror("错误", f"处理过程中出错：{e}")
        webbrowser.open('http://yepc.cn')

def open_url(event):
    #打开作者联系方式
    webbrowser.open('http://yepc.cn')

def Eixt():
    desktop_path = os.path.join(os.environ['USERPROFILE'], 'Desktop')
    # 菜单文件夹路径
    menu_folder_path = os.path.join(desktop_path, 'menu')
    print(menu_folder_path)
    if os.path.exists(menu_folder_path):
        # 删除文件夹
        shutil.rmtree(menu_folder_path)
        print("清理完成")
        window.destroy()
    else:
        print("没有需要清理的文件")
        window.destroy()

#权限
def is_admin():
    try:
        return ctypes.windll.shell32.IsUserAnAdmin()
    except:
        return False


#窗口UI
tmp = open('tmp.ico', 'wb+')
tmp.write(base64.b64decode(img))
tmp.close()
window = tk.Tk()
window.title(f"CDR_Tool {VERSION}")
window.geometry("400x220")
window.iconbitmap('tmp.ico')
os.remove('tmp.ico')
#查询是否为管理员
if not is_admin():
    # 如果不是管理员，尝试以管理员身份重新运行
    ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, ' '.join(sys.argv), None, 1)
    sys.exit()  # 退出当前非管理员进程

shuoming = tk.Label(window, text="软件可修复："
                                   "\n"
                                   "\n1.CDRx4提示未激活或者提示盗版问题"
                                   "\n"
                                   "\n2.CDRx4菜单栏显示异常"
                                   "\n"
                                   "\n3.CDRx4保存、另存、导入、导出按钮点击没反应",
                      font=("KaiTi", 12), justify="left")
Jihuob = tk.Button(window, text="1.激活", command=jihuo_button, width=10, height=1, font=("KaiTi", 13))
memu = tk.Button(window, text="2.菜单", command=memu_button, width=10, height=1, font=("KaiTi", 13))
chucun = tk.Button(window, text="3.导出", command=chucun_button, width=10, height=1, font=("KaiTi", 13))
text_label = tk.Label(window, text="夜鹏程_yepc.cn", font=("KaiTi", 12), cursor="hand2")

shuoming.grid(row=0, column=0, columnspan=3, padx=10, pady=5, sticky="w")
Jihuob.grid(row=1, column=0, padx=10, pady=5, sticky="ew")
memu.grid(row=1, column=1, padx=10, pady=5, sticky="ew")
chucun.grid(row=1, column=2, padx=10, pady=5, sticky="ew")
text_label.grid(row=3, column=2, sticky="se")

window.grid_columnconfigure(0, weight=1)
window.grid_columnconfigure(1, weight=1)
window.grid_columnconfigure(2, weight=1)
window.grid_rowconfigure(0, weight=1)
window.grid_rowconfigure(1, weight=1)
window.grid_rowconfigure(15, weight=0)
window.grid_rowconfigure(15, weight=0)

text_label.bind("<Button-1>", open_url)

window.resizable(False, False)
window.protocol("WM_DELETE_WINDOW", Eixt)
window.mainloop()